# notebook导出html时显示pyecharts
from pyecharts import *
online()
# 直接隐藏代码
from IPython.display import display
from IPython.display import HTML
import IPython.core.display as di
di.display_html('<script>jQuery(function() {if (jQuery("body.notebook_app").length == 0) { jQuery(".input_area").toggle(); jQuery(".prompt").toggle();}});</script>', raw=True)
CSS = """#notebook div.output_subarea {max-width:100%;}""" #changes output_subarea width to 100% (from 100% - 14ex)
HTML('<style>{}</style>'.format(CSS))
# 导包
import sys
sys.path.append('E:/aiMachineFactor-master/aiMachineFactor/factorEmpirical/')
import numpy as np
import pandas as pd
from scipy.stats import mstats
from scipy import stats
from datetime import datetime
from alphalens036.plotting import *
from alphalens036.utils import *
from alphalens036.performance import *
from alphalens036.pyeplotting import *
import os
# 禁止输出warining
import warnings
warnings.filterwarnings("ignore")
# 因子报告分析原始数据整理
#20秒
plot_data = PlotData.from_pickle('E:/aiMachineFactor-master/aiMachineFactor/factorGenerate/xgb_regress/predict',
'E:/aiMachineFactor-master/aiMachineFactor/cache/cache_data/total_filled',
'E:/aiMachineFactor-master/aiMachineFactor/cache/cache_data/classone'
)
plot_data.get_factor()
# plot_data._factor.head()
机器学习算法模型可以导出模型因子特征的重要性,这能帮助我们直观地观察模型主要受那些因子影响。
下图统计了从2010年开始,模型的特征重要性从大到小的排名。
#特征重要性图示
plot_data.read_feature(r'E:\aiMachineFactor-master\aiMachineFactor\factorGenerate\xgb_regress\importance')
plot_data.plot_feature()
不同分位数组合的日平均超额收益情况,图中的纵轴超额收益的单位为bps(0.0001)。
无论前瞻时间窗口为1天、5天、10天、20天,第五分位组合的超额收益均为正,第一分位组合超额收益则为负。
从一至五,各个分位数组合超额收益呈现递增趋势,显示出较好的分层效果。
#20秒
return_plot = ReturnPlot(plot_data)
return_plot.compute_mean_return()
return_plot.plot_q_bar()
计算最好与最坏的分位数组合的平均超额收益之差,绘制其随时间的变化。
无论前瞻时间窗口,该序列的聚集效应明显,与整个市场的波动性密切相关,而且均值大多数时间内保持为正数。
return_plot.plot_q_spread()
做多最好的分位数组合同时做空最差的分位数组合,不同的前瞻时间窗口表示不同的持有期。
持仓周期与组合的表现效果之间存在反向关系,随市场变化调仓越快,组合的表现越好。
#2m23s
return_plot.plot_cum_ret_p()
因子的自相关系数可以展示出因子的时间序列稳定性。
当前因子的自相关系数大部分时间保持比较高的水平。
# 38s
turnover_plot = TurnoverPlot(plot_data)
turnover_plot.compute_q_turnover()
turnover_plot.plot_ac(period='1D')
计算因子换手率可以展示出因子的时间序列稳定性,侧面反映出使用该因子做策略时候的调仓成本等。
turnover_plot.plot_turnover()
信息系数衡量的是因子对股票横截面超额收益率的预测能力;计算方式为当期因子值与下期股票收益率之间的秩相关系数。
信息系数越接近于1,说明因子的预测效果越好。
对于不同的调仓周期,IC月度平均后作热度图,横轴为年度,纵轴为月度。
图中颜色越红表示IC越大,也即表示因子在这个月表现良好,颜色越绿表示因子在这个月表现不佳。
# 51s
ic_plot=ICPlot(plot_data)
ic_plot.compute_ic()
ic_plot.plot_ic_heatmap()
对于不同的调仓周期,计算得到的因子信息系数的时间序列作图,通过查验因子信息系数的时间序列,可以看到因子的预测能力随着时间的变化。
信息系数序列的均值尽可能的大,走势越稳定,表明因子的效果越好。
ic_plot.plot_ic_ts()
对于不同的调仓周期,计算得到的因子信息系数的作分布直方图。
可以直观看到信息系数的分布特征,比如左偏、厚尾等现象。
ic_plot.plot_ic_hist()
# TODO 分行业的柱状图,时间上累计平均
# TODO 反应最大回测、波动性、alpha、beta、等等。